 1.Metastore
   
   在Hive的具体使用中，首先面临的问题便是如何定义表结构信息，跟结构化的数据映
射成功。所谓的映射指的是一种对应关系。在Hive中需要描述清楚表跟文件之间的映
射关系、列和字段之间的关系等等信息。这些描述映射关系的数据的称之为Hive的元
数据。该数据十分重要，因为只有通过查询它才可以确定用户编写sql和最终操作文
件之间的关系。
   
   Metadata即元数据。元数据包含用Hive创建的database、table、表的字段等元信
息。元数据存储在关系型数据库中。如hive内置的Derby、第三方如MySQL等。
   Metastore即元数据服务，是Hive用来管理库表元数据的一个服务。有了它上层的
服务不用再跟裸的文件数据打交道，而是可以基于结构化的库表信息构建计算框架。
   通过metastore服务将Hive的元数据暴露出去，而不是需要通过对Hive元数据库
mysql的访问才能拿到Hive的元数据信息；metastore服务实际上就是一种thrift服
务，通过它用户可以获取到Hive元数据，并且通过thrift获取元数据的方式，屏蔽了
数据库访问需要驱动，url，用户名，密码等细节。
 
 2.metastore三种配置方式
   
   1).内嵌模式
   内嵌模式使用的是内嵌的Derby数据库来存储元数据，也不需要额外起Metastore服
务。数据库和Metastore服务都嵌入在主Hive Server进程中。这个是默认的，配置
简单，但是一次只能一个客户端连接，适用于用来实验，不适用于生产环境。
   优点：配置简单，解压hive安装包 bin/hive 启动即可使用；
   缺点：不同路径启动hive，每一个hive拥有一套自己的元数据，无法共享。
   2).本地模式
   本地模式采用外部数据库来存储元数据，目前支持的数据库有：MySQL、Postgres、Oracle、
MS SQL Server。教学中实际采用的是MySQL。
   本地模式不需要单独起metastore服务，用的是跟Hive在同一个进程里的metastore
服务。也就是说当启动一个hive 服务时，其内部会启动一个metastore服务。Hive根
据 hive.metastore.uris 参数值来判断，如果为空，则为本地模式。
   缺点：每启动一次hive服务，都内置启动了一个metastore；在hive-site.xml中暴露
的数据库的连接信息；
   优点：配置较简单，本地模式下hive的配置中指定mysql的相关信息即可。
   3).远程模式
   远程模式下，需要单独起metastore服务，然后每个客户端都在配置文件里配置连接
到该metastore服务。远程模式的metastore服务和hive运行在不同的进程里。在生
产环境中，建议用远程模式来配置Hive Metastore。
   在这种模式下，其他依赖Hive的软件都可以通过Metastore访问Hive。此时需要配置
hive.metastore.uris 参数来指定 metastore 服务运行的机器ip和端口，并且需要单
独手动启动metastore服务。metastore服务可以配置多个节点上，避免单节点故障
导致整个集群的hive client不可用。同时hive client配置多个metastore地址，会自
动选择可用节点。
   
   